// coding: utf-8
// @Author : lryself
// @Date : 2020/10/22 13:34
// @Software: GoLand

// 题目：字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段，同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。
// 题目url:https://leetcode-cn.com/problems/partition-labels/submissions/
// 作者题解：https://leetcode-cn.com/problems/partition-labels/solution/maphua-dong-chuang-kou-by-xin-ru-zhi-shui-33/
package main

import (
	"fmt"
)

func main() {
	fmt.Println(partitionLabels("ababcbacadefegdehijhklij"))
}
func partitionLabels(S string) []int {
	result := []int{}
	first:= 0
	chdict := make(map[int32]int)
	for i,ch := range S{
		chdict[ch]=i
	}
	last:=0
	for i,ch := range S{
		chlast:=chdict[ch]
		if i<=last && last<chlast{
			last=chlast
		}else if i>last{
			result=append(result, last-first+1)
			first=last+1
			last=chlast
		}
	}
	result=append(result,last-first+1)
	return result
}